//package com.it.common.exception;
//
//import com.it.common.config.ResponseResult;
//import com.it.common.config.ResultBean;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.validation.BindException;
//import org.springframework.validation.BindingResult;
//import org.springframework.validation.FieldError;
//import org.springframework.web.bind.MethodArgumentNotValidException;
//import org.springframework.web.bind.annotation.ExceptionHandler;
//import org.springframework.web.bind.annotation.RestControllerAdvice;
//
//import javax.validation.ConstraintViolation;
//import javax.validation.ConstraintViolationException;
//import java.util.Set;
//
///**
// * 全局异常处理
// */
//@Slf4j
//@RestControllerAdvice
//public class GlobalExceptionHandler {
//
//    /**
//     * 处理自定义异常
//     */
//    @ExceptionHandler(CustomException.class)
//    public ResponseResult<Void> handleCustomException(CustomException e) {
//        log.error("自定义异常：{}", e.getMessage());
//        return ResponseResult.error(e.getCode(), e.getMessage());
//    }
//
//    /**
//     * 处理参数校验异常（@Validated）
//     */
//    @ExceptionHandler(MethodArgumentNotValidException.class)
//    public ResponseResult<Void> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
//        BindingResult bindingResult = e.getBindingResult();
//        StringBuilder sb = new StringBuilder("参数校验失败:");
//        for (FieldError fieldError : bindingResult.getFieldErrors()) {
//            sb.append(fieldError.getField()).append("：").append(fieldError.getDefaultMessage()).append(", ");
//        }
//        String msg = sb.toString();
//        log.error(msg);
//        return ResponseResult.error(ResultBean.DATA_VALIDATION_ERROR.value(), msg);
//    }
//
//    /**
//     * 处理参数绑定异常
//     */
//    @ExceptionHandler(BindException.class)
//    public ResponseResult<Void> handleBindException(BindException e) {
//        BindingResult bindingResult = e.getBindingResult();
//        StringBuilder sb = new StringBuilder("参数绑定失败:");
//        for (FieldError fieldError : bindingResult.getFieldErrors()) {
//            sb.append(fieldError.getField()).append("：").append(fieldError.getDefaultMessage()).append(", ");
//        }
//        String msg = sb.toString();
//        log.error(msg);
//        return ResponseResult.error(ResultBean.DATA_VALIDATION_ERROR.value(), msg);
//    }
//
//    /**
//     * 处理单个参数校验异常
//     */
//    @ExceptionHandler(ConstraintViolationException.class)
//    public ResponseResult<Void> handleConstraintViolationException(ConstraintViolationException e) {
//        Set<ConstraintViolation<?>> constraintViolations = e.getConstraintViolations();
//        StringBuilder msgBuilder = new StringBuilder();
//        for (ConstraintViolation<?> constraintViolation : constraintViolations) {
//            msgBuilder.append(constraintViolation.getMessage()).append(", ");
//        }
//        String msg = msgBuilder.toString();
//        log.error(msg);
//        return ResponseResult.error(ResultBean.DATA_VALIDATION_ERROR.value(), msg);
//    }
//
//    /**
//     * 处理未知异常
//     */
//    @ExceptionHandler(Exception.class)
//    public ResponseResult<Void> handleException(Exception e) {
//        log.error("系统异常", e);
//        return ResponseResult.error(ResultBean.EXCEPTION_ERROR);
//    }
//}